/**************************************************************************
 *  创建者：        hualei
 *  开始时间：   2018.06.23
 *  copyright:  (C) 深圳市华友高科有限公司
 *  修改说明：  (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 *
 ***************************************************************************
 *   MOVE_FREE 自由导航指令属性编辑视窗
 *
 ***************************************************************************/
#ifndef MOVEFREEINSTRUCTIONVIEW_H
#define MOVEFREEINSTRUCTIONVIEW_H

#include <QWidget>
#include <QObject>
#include "movefreeinstructionview_global.h"
#include <QTranslator>
#include "movefreedpointview.h"
#include <QDialog>
#include "movefreemovetypeview.h"
#include "instructionEnum.h"

class ProgramView;
class MoveFreeInstructionTrackView;
class MoveFreeDPointView;
class MoveFreeVmarkSettingView;
<<<<<<< HEAD
extern FileData fileData;
=======
>>>>>>> dev
//class MapView;
class CommunicateNormalDelegate;

namespace Ui {
class MoveFreeInstructionView;
}

///**
// * @brief The EM_POINT_TYPE enum    点位类型
// */
//enum E_MOVE_FREE_POINTS_ARRY_TYPE
//{
//    E_POINT_TYPE_DP,        // 单一点位
//    E_POINT_TYPE_DPR,       // 单寄存器点位
//    E_POINT_TYPE_DPL        // 轨道点位
//};

/**
 * @brief The EM_NAVIGATION_TYPE enum   导航类型
 */
enum EM_NAVIGATION_TYPE
{
    E_NAVIGATION_TYPE_WHEEL,        // 脚轮导航
    E_NAVIGATION_TYPE_IMU,          // 惯性导航
    E_NAVIGATION_TYPE_LASER         // 激光导航
};

/**
 * @brief The EM_MOVE_FREE_MOVE_TYPE enum        运行类型
 */
enum EM_MOVE_FREE_MOVE_TYPE
{
    E_MOVE_FREE_MOVE_P,         // 向前走
    E_MOVE_FREE_MOVE_N          // 向后走
};

///**
// * @brief The EM_MOVE_FREE_DETECT_BARRIER enum        探测障碍
// */
enum EM_MOVE_FREE_DETECT_BARRIER
{
    E_MOVE_FREE_DETECT_BARRIER_NO,         // 探测障碍
    E_MOVE_FREE_DETECT_BARRIER_YES         // 不探测障碍
};

/**
 * @brief The MoveFreeInstructionView class MOVE_FREE 自由导航指令属性编辑视窗
 */
class MOVEFREEINSTRUCTIONVIEWSHARED_EXPORT MoveFreeInstructionView : public QDialog
{
    Q_OBJECT

public:
    /**
     * @brief MoveFreeInstructionView   构造函数
     * @param parent
     */
    MoveFreeInstructionView(int styleId,CommunicateNormalDelegate *communicateNormalDelegateIn,QDialog *parent = 0);

    /**
     * @brief updateView        更新界面内容
     */
    void updateView();

    /**
     * @brief getInput          获取界面内容
     */
    void getInput();

    /**
     * @brief changeLanguage      界面语言切换
     * @param language
     */
    void changeLanguage(int language);

    void initialDisplayStyle(int styleId);

private slots:
    /**
     * @brief on_DP_SinglePoint_radioButton_clicked         单点运行模式槽函数
     */
    void on_DP_SinglePoint_radioButton_clicked();

    /**
     * @brief on_DPR_RegisterPoint_radioButton_clicked      单寄存器点运行模式槽函数
     */
    void on_DPR_RegisterPoint_radioButton_clicked();

    /**
     * @brief on_DPL_TrackPoint_radioButton_clicked         轨道运行模式槽函数
     */
    void on_DPL_TrackPoint_radioButton_clicked();

    /**
     * @brief on_forward_Btn_clicked          上一页槽函数
     */
    void on_forward_Btn_clicked();

    /**
     * @brief on_save_Btn_clicked             指令属性保存槽函数
     */
    void finishedEditInstruction_slot();

    /**
     * @brief on_clearNote_Btn_clicked        注释清除槽函数
     */
    void on_clearNote_Btn_clicked();

    /**
     * @brief on_WHEEL_radioButton_clicked      WHEEL导轮导航模式槽函数
     */
    void on_WHEEL_radioButton_clicked();

    /**
     * @brief on_IMU_radioButton_clicked        IMU惯性导航模式槽函数
     */
    void on_IMU_radioButton_clicked();

    /**
     * @brief on_LASER_radioButton_clicked      LASER激光导航模式槽函数
     */
    void on_LASER_radioButton_clicked();

    /**
     * @brief on_VelocityRatio_slider_valueChanged          速度滑块数值改变槽函数
     * @param value
     */
    void on_VelocityRatio_slider_valueChanged(int value);

    /**
     * @brief on_VelocityRatio_slider_sliderMoved           速度滑块位置改变槽函数
     * @param position
     */
    void on_VelocityRatio_slider_sliderMoved(int position);
    
    /**
     * @brief on_SeletionTrackFile_Btn_clicked              选择轨道文件槽函数
     */
//    void on_SeletionTrackFile_Btn_clicked();

    /**
     * @brief on_EditPoint_Btn_clicked          编辑点位槽函数
     */
    void on_EditPoint_Btn_clicked();

//    /**
//     * @brief on_recordPoint_Btn_clicked        载入点位槽函数
//     */
//    void on_recordPoint_Btn_clicked();

    /**
     * @brief on_moveToPoint_Btn_clicked        移动到点槽函数
     */
    void on_moveToPoint_Btn_clicked();

    /**
     * @brief on_VelocityRatio_LineEdit_textChanged         速度输入框内容改变槽函数
     * @param arg1                                          改变的内容
     */
    void on_VelocityRatio_LineEdit_textChanged(const QString &arg1);

    /**
     * @brief on_P_radioButton_clicked            点击选择P(前进)响应槽函数
     */
    void on_P_radioButton_clicked();

    /**
     * @brief on_N_radioButton_clicked             点击选择N(后退)响应槽函数
     */
    void on_N_radioButton_clicked();

    /**
     * @brief on_MovePmtSet_Btn_clicked            点击运行参数设置响应槽函数
     */
    void on_MovePmtSet_Btn_clicked();

    /**
     * @brief on_next_Btn_clicked                  下一页进入Vmark参数设置界面
     */
    void on_next_Btn_clicked();

signals:

    /**
     * @brief clearNoteSignal               清除注释
     */
    void clearNoteSignal();

    /**
     * @brief finishEditInstruction         完成指令编辑
     */
    void finishEditInstructionSignal();

    /**
     * @brief saveInstruction               保存指令
     * @param outputInstruction             编辑好的指令字符串
     */
    void saveInstructionSignal(QString outputInstruction);

    /**
     * @brief openSelectionTrackFile        打开选择轨道文件视图信号
     */
    void openSelectionTrackFile();

    /**
     * @brief recordDPointSignal            载入点位数据信号
     * @param dpointNum                     点位数量
     */
    void recordDPointSignal(int recordType);

    /**
     * @brief moveToDPointSignal            移动到点的信号
     * @param dpointNum                     点位数量
     */
    void moveToDPointSignal(int dpointNum);
    
public:

    /**
     * @brief moveFreeVmarkSettingView          自由导航Vmark参数配置窗口对象
     */
    MoveFreeVmarkSettingView *moveFreeVmarkSettingView;



    /**
     * @brief moveFreeMoveTypeView              自由导航移动参数配置窗口对象
     */
    MoveFreeMoveTypeView *moveFreeMoveTypeView;

    /**
     * @brief programView       程序界面父窗口
     */
    ProgramView *programView;

    /**
     * @brief moveFreeInstructionTrackView    轨道文件选择视窗
     */
    MoveFreeInstructionTrackView *moveFreeInstructionTrackView;

    /**
     * @brief moveFreeDPointView             点位配置视窗
     */
    MoveFreeDPointView *moveFreeDPointView;

    /**
     * @brief instruction       指令
     */
    QString instruction;

    /**
     * @brief pointType         运行点位类型: 0-DP单点运行　1-DPR单寄存器点运行　2-DPL轨道运行
     */
    E_MOVE_FREE_POINTS_ARRY_TYPE pointType;

    /**
     * @brief singlePointValue  单点运行点位
     */
    int singlePointValue;

    /**
     * @brief registerPointValue 　单寄存器点位运行点位
     */
    int registerPointValue;

    /**
     * @brief trackFile            轨道运行文件
     */
    QString trackFile;

    /**
     * @brief velocityRatio         运行速度比
     */
    int velocityRatio;

    /**
     * @brief navigationMode        导航模式：　0-WHEEL导轮　1-IMU惯性导航　2-LASER激光导航
     */
    EM_NAVIGATION_TYPE navigationMode;

    /**
     * @brief annotation            注释
     */
    QString annotation;

    /**
     * @brief moveFreeMoveType              运动类型
     */
    EM_MOVE_FREE_MOVE_TYPE moveFreeMoveType;

    /**
     * @brief cntValue              CNT平滑数值
     */
    int cntValue;

    /**
     * @brief moveFreeMoveTrajectoryType    运行轨迹类型
     */
    ENUM_MOVE_FREE_MOVE_TRAJECTORY_TYPE moveFreeMoveTrajectoryType;

    /**
     * @brief allowAccuracy             停车精度，单位米
     */
    float allowAccuracy;

    /**
     * @brief validLaserRange_moving    运行过程的匹配范围,单位米
     */
    float validLaserRange_moving;

    /**
     * @brief validLaserRange_stopping  停车时的匹配范围,单位米。
     */
    float validLaserRange_stopping;
<<<<<<< HEAD


=======
>>>>>>> dev

private:
    /**
     * @brief communicateNormalDelegate
     */
    CommunicateNormalDelegate *communicateNormalDelegate;
    Ui::MoveFreeInstructionView *ui;

    /**
     * @brief translator        翻译
     */
    QTranslator translator;

};

#endif // MOVEFREEINSTRUCTIONVIEW_H
